লারাভেল মকিং (Laravel Mocking)

Web Development - লারাভেল (Laravel) - লারাভেল টেস্টিং (Laravel Testing) |
10
10

লারাভেল (Laravel) একটি শক্তিশালী PHP ফ্রেমওয়ার্ক যা ডেভেলপারদের অ্যাপ্লিকেশন টেস্টিং করার জন্য উন্নত টুলস এবং ফিচার সরবরাহ করে। এর মধ্যে একটি গুরুত্বপূর্ণ টেস্টিং টেকনিক হল মকিং (Mocking)। মকিং হলো একটি টেস্টিং কৌশল যেখানে আপনি নির্দিষ্ট ডিপেনডেন্সি বা ক্লাসের আসল কার্যকলাপের পরিবর্তে একটি মক অবজেক্ট বা মক ফাংশন ব্যবহার করেন। এটি মূলত টেস্টিংকে আরও নির্দিষ্ট এবং দ্রুত করার জন্য ব্যবহৃত হয়, যেখানে আসল ডিপেনডেন্সি বা সিস্টেমের প্রভাব এড়ানো হয়।

মকিং (Mocking) কি?

মকিং (Mocking) একটি টেস্টিং কৌশল যা ব্যবহার করে আপনি একটি মক অবজেক্ট তৈরি করেন যা একটি আসল অবজেক্টের আচরণ নকল করে। এটি সাহায্য করে যখন আপনি কোনো বিশেষ ফাংশন বা ক্লাসের আচরণ পরীক্ষা করতে চান, কিন্তু সেই ফাংশন বা ক্লাসের আসল কার্যকারিতা চালাতে চান না। এর ফলে টেস্টিং আরো দ্রুত হয় এবং নির্দিষ্ট অংশগুলোর উপর মনোযোগ দিতে সহজ হয়।

লারাভেল মকিং

লারাভেল মকিংয়ের জন্য Mockery প্যাকেজ ব্যবহার করে থাকে, যা লারাভেলের টেস্টিং ফিচারের সাথে একত্রে কাজ করে। লারাভেল ডিফল্টভাবে Mockery ইন্টিগ্রেটেডভাবে প্রদান করে, যাতে আপনি সহজেই মক অবজেক্ট তৈরি এবং ব্যবহার করতে পারেন।

লারাভেল মকিং ব্যবহারের পদ্ধতি

লাটাভেলে মকিং ব্যবহার করার জন্য Mockery ক্লাসের mock() মেথড ব্যবহার করা হয়। এখানে কিছু উদাহরণ দেওয়া হলো:

১. মক অবজেক্ট তৈরি করা

ধরা যাক, আপনার একটি UserService ক্লাস রয়েছে যেটি একটি UserRepository ক্লাসের উপর নির্ভরশীল। আপনি চাইলে UserRepository ক্লাসটি মক করে টেস্ট করতে পারেন, যাতে আসল ডাটাবেস কনফিগারেশন বা ডেটা প্রয়োজন না হয়।

use Mockery;
use App\Services\UserService;
use App\Repositories\UserRepository;

public function testUserService()
{
    // মক অবজেক্ট তৈরি
    $mockRepository = Mockery::mock(UserRepository::class);

    // মক অবজেক্টে প্রত্যাশিত আচরণ নির্ধারণ
    $mockRepository->shouldReceive('getUser')->with(1)->andReturn('John Doe');

    // সার্ভিস ক্লাসে মক অবজেক্ট ইনজেক্ট করা
    $service = new UserService($mockRepository);

    // টেস্ট করা
    $result = $service->getUser(1);

    $this->assertEquals('John Doe', $result);
}

এখানে, আমরা UserRepository ক্লাসের মক অবজেক্ট তৈরি করেছি এবং তার getUser() মেথডের জন্য প্রত্যাশিত আউটপুট নির্ধারণ করেছি। তারপর, এই মক অবজেক্টটি UserService ক্লাসে ইনজেক্ট করেছি এবং টেস্ট করেছি।

২. মকিংয়ের জন্য মেথড নির্ধারণ করা

shouldReceive() মেথড ব্যবহার করে আপনি মক অবজেক্টের জন্য নির্দিষ্ট মেথড এবং তাদের প্রত্যাশিত আউটপুট সেট করতে পারেন। উদাহরণ:

$mock = Mockery::mock('ClassName');
$mock->shouldReceive('methodName')
     ->once() // মেথডটি একবার কল হবে
     ->with('argument') // নির্দিষ্ট আর্গুমেন্ট দিয়ে
     ->andReturn('result'); // প্রত্যাশিত রেজাল্ট

এখানে, methodName হল সেই মেথড যা আপনি মক করতে চান, এবং andReturn() দ্বারা আপনি যে ফলাফল আশা করছেন তা নির্ধারণ করবেন।

৩. মক অবজেক্টে মেথড কল কন্ট্রোল করা

লাটাভেলে, আপনি যদি মক অবজেক্টে কোনো মেথড কল না করে থাকেন, তবে mockery এর never() ফাংশন ব্যবহার করতে পারেন:

$mock->shouldReceive('methodName')
     ->never(); // এই মেথডটি কখনোই কল হবে না

এটি নিশ্চিত করে যে মক অবজেক্টে ওই মেথডটি কখনো কল হবে না।

৪. মক অবজেক্ট এবং অ্যাসার্ট (Assert) ব্যবহার

আপনি যখন মক অবজেক্ট তৈরি করেন, তখন তা অ্যাসার্ট (assert) করার মাধ্যমে নিশ্চিত করতে পারেন যে প্রত্যাশিত মেথডগুলি সঠিকভাবে কল হয়েছে।

$mock->shouldReceive('methodName')
     ->once()
     ->andReturn('someValue');

// টেস্ট শেষে মক অবজেক্টের প্রত্যাশিত মেথড কল হয়েছে কি না তা পরীক্ষা
$mock->shouldHaveReceived('methodName')->once();

এটি নিশ্চিত করবে যে মক অবজেক্টের methodName মেথডটি একবার কল হয়েছে।

৫. মক অবজেক্ট ক্লিনআপ করা

লারাভেলে, মক অবজেক্ট ব্যবহার করার পর Mockery::close() ফাংশনটি কল করে ক্লিনআপ করতে হয়।

public function tearDown(): void
{
    Mockery::close();
}

এটি নিশ্চিত করবে যে সমস্ত মক অবজেক্ট সঠিকভাবে ক্লিনআপ হয়েছে এবং পরবর্তী টেস্টে কোনো সমস্যা হবে না।


উপসংহার

লারাভেল মকিং (Mocking) একটি শক্তিশালী টেস্টিং কৌশল যা আপনাকে নির্দিষ্ট ডিপেনডেন্সি বা ক্লাসের আচরণকে নকল করে টেস্টিং করতে সাহায্য করে। এটি টেস্টিং প্রক্রিয়াকে দ্রুত এবং নির্দিষ্ট করে তোলে, যেখানে আপনি আসল কার্যকলাপের পরিবর্তে মক অবজেক্ট ব্যবহার করতে পারেন। মকিংয়ের মাধ্যমে ডিপেনডেন্সি ইনজেকশন এবং সার্ভিস ক্লাসগুলোর সঠিক কাজের পরীক্ষা করা সহজ হয়, এবং আপনি কোডের নির্দিষ্ট অংশগুলোকে আলাদা করে টেস্ট করতে পারেন।

Content added By
Promotion